package com.yf1706.service;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yf1706.bean.Emp;
import com.yf1706.bean.EmpAttachment;
import com.yf1706.bean.EmpCommunicationInfo;
import com.yf1706.bean.EmpDetailInfo;
import com.yf1706.bean.EmpEducationHistory;
import com.yf1706.bean.EmpFamilyInfo;
import com.yf1706.bean.EmpSkillCertificate;
import com.yf1706.bean.EmpWorkHistory;
import com.yf1706.dao.jpa.IEmpAttachmentJDAO;
import com.yf1706.dao.jpa.IEmpCommunicationInfoJDAO;
import com.yf1706.dao.jpa.IEmpDetailInfoJDAO;
import com.yf1706.dao.jpa.IEmpEducationHistoryJDAO;
import com.yf1706.dao.jpa.IEmpFamilyInfoJDAO;
import com.yf1706.dao.jpa.IEmpJDAO;
import com.yf1706.dao.jpa.IEmpSkillCertificateJDAO;
import com.yf1706.dao.jpa.IEmpWorkHistoryJDAO;
import com.yf1706.dao.mybatis.IEmpMDAO;
import com.yf1706.vo.EUDataGridResult;

@Service
@Transactional(rollbackFor = Exception.class)
public class EmpService {
	@Autowired
	private IEmpJDAO ejdao;
	@Autowired
	private IEmpMDAO emdao;
	@Autowired
	private IEmpAttachmentJDAO eajdao;
	@Autowired
	private IEmpCommunicationInfoJDAO ecijdao;
	@Autowired
	private IEmpDetailInfoJDAO edidao;
	@Autowired
	private IEmpEducationHistoryJDAO eehjdao;
	@Autowired
	private IEmpFamilyInfoJDAO efijdao;
	@Autowired
	private IEmpSkillCertificateJDAO escjdao;
	@Autowired
	private IEmpWorkHistoryJDAO ewhjdao;

	public Emp findEmpById(int empId) {
		return ejdao.findByEmpId(empId);
	}

	public List<Emp> queryAllEmp() {
		return emdao.queryAllEmp();
	}

	public List<Emp> queryBySearch(String searchValue,Date beginDate,Date endDate,boolean showResign) {
		return emdao.queryBySearch(searchValue, beginDate,endDate,showResign);
	}

	// 根据员工编号获取Mybatis员工对象(基本关联表)
	public Emp queryBasicById(int empId) {
		return emdao.queryBasicById(empId);
	}

	// 根据员工编号获取Mybatis员工对象(基本关联表)
	public Emp queryById(int empId) {
		return emdao.queryById(empId);
	}
	
	// 根据员工编号获取JPA员工对象(基本表)
	public Emp findBasicByEmpId(int empId) {
		return ejdao.findBasicByEmpId(empId);
	}
	
	//根据员工编号更新相片地址
	public void updateEmpPhotoByEmpId(int empId,String photo) {
		Emp emp=this.findBasicByEmpId(empId);
		emp.setPhoto(photo);
		ejdao.save(emp);
	}

	// 保存员工对象
	public void saveEmpAllById(Emp emp) {
		ejdao.save(emp);
	}

	// 根据编号获取员工详细信息对象
	public EmpDetailInfo findEmpDetailInfoById(int id) {
		return edidao.findById(id);
	}

	// 保存员工详细信息对象
	public void saveEmpDetailInfo(EmpDetailInfo empDetailInfo) {
		edidao.save(empDetailInfo);
	}

	// 根据编号获取员工通讯信息对象
	public EmpCommunicationInfo findEmpCommunicationById(int id) {
		return ecijdao.findById(id);
	}

	// 保存员工通讯信息对象
	public void saveEmpCommunicationInfo(EmpCommunicationInfo empCommunicationInfo) {
		ecijdao.save(empCommunicationInfo);
	}

	// 根据员工编号获取员工家庭信息对象集合
	public List<EmpFamilyInfo> findEmpFamilyInfoByEmpId(int empId) {
		return efijdao.findByEmpId(empId);
	}

	// 根据员工编号新增员工家庭信息记录
	public void addEmpFamilyInfoByEmpId(int empId, EmpFamilyInfo efi) {
		Emp emp = ejdao.findBasicByEmpId(empId);
		efi.setEmp(emp);
		efijdao.save(efi);
	}

	// 根据编号删除员工家庭信息记录
	public void deleteEmpFamilyInfoByEmpId(int id) {
		efijdao.deleteById(id);
	}

	// 根据编号更新员工家庭信息记录
	public void updateEmpFamilyInfoById(int empId, EmpFamilyInfo efi) {
		Emp emp = ejdao.findBasicByEmpId(empId);
		efi.setEmp(emp);
		efijdao.save(efi);
	}

	// 根据员工编号获取员工工作履历对象集合
	public List<EmpWorkHistory> findEmpWorkHistoryByEmpId(int empId) {
		return ewhjdao.findByEmpId(empId);
	}

	// 根据员工编号新增员工工作履历记录
	public void addEmpWorkHistoryByEmpId(int empId, EmpWorkHistory ewh) {
		Emp emp = ejdao.findBasicByEmpId(empId);
		ewh.setEmp(emp);
		ewhjdao.save(ewh);
	}

	// 根据编号删除员工工作信息记录
	public void deleteEmpWorkHistoryByEmpId(int id) {
		ewhjdao.deleteById(id);
	}

	// 根据编号更新员工工作信息记录
	public void updateEmpWorkHistoryByEmpId(int empId, EmpWorkHistory ewh) {
		Emp emp = ejdao.findBasicByEmpId(empId);
		ewh.setEmp(emp);
		ewhjdao.save(ewh);
	}

	// 根据员工编号获取员工教育履历对象集合
	public List<EmpEducationHistory> findEmpEducationHistoryByEmpId(int empId) {
		return eehjdao.findByEmpId(empId);
	}

	// 根据员工编号新增员工教育履历记录
	public void addEmpEducationHistoryByEmpId(int empId, EmpEducationHistory eeh) {
		Emp emp = ejdao.findBasicByEmpId(empId);
		eeh.setEmp(emp);
		eehjdao.save(eeh);
	}

	// 根据编号删除员工教育信息记录
	public void deleteEmpEducationHistoryByEmpId(int id) {
		eehjdao.deleteById(id);
	}

	// 根据编号更新员工教育信息记录
	public void updateEmpEducationHistoryById(int empId, EmpEducationHistory eeh) {
		Emp emp = ejdao.findBasicByEmpId(empId);
		eeh.setEmp(emp);
		eehjdao.save(eeh);
	}

	// 根据员工编号获取员工教育履历对象集合
	public List<EmpSkillCertificate> findEmpSkillCertificateByEmpId(int empId) {
		return escjdao.findByEmpId(empId);
	}

	// 根据员工编号新增员工技能证书记录
	public void addEmpSkillCertificateByEmpId(int empId, EmpSkillCertificate esc) {
		Emp emp = ejdao.findBasicByEmpId(empId);
		esc.setEmp(emp);
		escjdao.save(esc);
	}

	// 根据编号删除员工技能证书记录
	public void deleteEmpSkillCertificateByEmpId(int id) {
		escjdao.deleteById(id);
	}

	// 根据编号更新员工技能证书记录
	public void updateEmpSkillCertificateByEmpId(int empId, EmpSkillCertificate esc) {
		Emp emp = ejdao.findBasicByEmpId(empId);
		esc.setEmp(emp);
		escjdao.save(esc);
	}

	// 根据员工编号获取员工附件对象集合
	public List<EmpAttachment> findEmpAttachmentByEmpId(int empId) {
		return eajdao.findByEmpId(empId);
	}

	// 根据员工编号新增员工附件记录
	public void addEmpAttachmentByEmpId(int empId, EmpAttachment ea) {
		Emp emp = ejdao.findBasicByEmpId(empId);
		ea.setEmp(emp);
		eajdao.save(ea);
	}

	// 根据编号删除员工附件记录
	public void deleteEmpAttachmentByAttachmentId(int attachmentId) {
		eajdao.delete(eajdao.findByAttachmentId(attachmentId));
	}

	// 根据编号更新员工附件记录
	public void updateEmpAttachmentByAttachmentId(int attachmentId,String attachmentType,String remark) {
		EmpAttachment ea=eajdao.findByAttachmentId(attachmentId);
		ea.setAttachmentType(attachmentType);
		ea.setRemark(remark);
		eajdao.save(ea);
	}

	/**
	 * 用于员工端登陆
	 */
	public Emp empLogin(int empid, String password) {
		return ejdao.findBylogin(empid, password);
	}
}
